package com.itcoon.cloud.framework.ex.register;

import com.itcoon.cloud.framework.ex.exception.BaseException;
import com.itcoon.cloud.framework.ex.errorcode.IExceptionCode;

import java.util.Arrays;

public interface IErrorCodeRegister {

    void preRegister();

    void register(String applicationName, String errorCode, String message);

    void postRegister();

    String getMessage(String applicationName, String code, String... args);

    default <EX extends BaseException, E extends Enum<E> & IExceptionCode<EX>> void register(String applicationName, E errorCode) {
        this.register(applicationName, errorCode.getCode(), errorCode.getMessage());
    }

    default  <EX extends BaseException, E extends Enum<E> & IExceptionCode<EX>> void register(String applicationName, Class<E> enumType, E... ignores) {
        E[] errorCodes = enumType.getEnumConstants();
        for (E errorCode : errorCodes) {
            if(!Arrays.asList(ignores).contains(errorCode)){
                this.register(applicationName, errorCode);
            }
        }
    }
}
